package com.gitee.zihaolicn;

import com.strobel.decompiler.Decompiler;
import com.strobel.decompiler.DecompilerSettings;
import com.strobel.decompiler.PlainTextOutput;

import java.io.StringWriter;

/**
 * 演示 Procyon 反编译 API 的最小用法
 * 运行前：把 procyon-decompiler-0.6.0.jar 放到 classpath
 */
public class ProcyonApiDemo {

    public static void main(String[] args) throws Exception {
        /*
         * 1. 准备一个你想反编译的 class 文件（任意 .class 均可）
         *    这里为了 demo 方便，直接反编译 ProcyonApiDemo 自身编译后的字节码
         */
        String className = ProcyonApiDemo.class.getName();
        byte[] classBytes = getClassBytes(className);   // 从运行时 ClassLoader 里拿

        /*
         * 2. 组装反编译器
         */
        DecompilerSettings settings = DecompilerSettings.javaDefaults();
        StringWriter sw = new StringWriter();
        PlainTextOutput output = new PlainTextOutput(sw);

        /*
         * 3. 一行代码完成反编译
         *    参数1：类全限定名
         *    参数2：字节码输入流
         *    参数3：输出接收器
         *    参数4：设置
         */
        Decompiler.decompile(className,
                output,
                settings);

        
        /*
         * 4. 查看结果
         */
        System.out.println("----- Decompiled Java Source -----");
        System.out.println(sw.toString());
    }

    /* 工具：从当前 ClassLoader 里读取 .class 字节数组 */
    private static byte[] getClassBytes(String className) throws Exception {
        String resource = "/" + className.replace('.', '/') + ".class";
        try (java.io.InputStream in = ProcyonApiDemo.class.getResourceAsStream(resource)) {
            if (in == null) throw new IllegalStateException("class not found: " + resource);
            return in.readAllBytes();
        }
    }
}